package com.healthy.sport.demo.datasource;

import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

import java.util.Map;


/**
 * @author ln
 * @Description: 动态数据源切换
 * @date 2020/11/9
 */

/**
 * 这个类的基本运作方式，它是一个abstract类，所以我们使用的话，推荐的方式是创建一个类来继承它并且实现它的determineCurrentLookupKey()方法，
 * 这个方法介绍上面也进行了说明，就是通过这个方法进行数据源的切换，这个时候你会又疑问，我没设置数据源，它是怎么切换的？
 * 上面我贴出了另外一个核心的方法setTargetDataSources(Map<Object, Object> targetDataSources)，
 * 它需要一个Map，在方法注释中我们可以得知，这个Map存储的就是我们配置的多个数据源的键值对。
 * 我们整理一下这个类切换数据源的运作方式，
 * 这个类在连接数据库之前会执行determineCurrentLookupKey()方法，
 * 这个方法返回的数据将作为key去targetDataSources中查找相应的值，如果查找到相对应的DataSource，那么就使用此DataSource获取数据库连接。
 */
@Slf4j
public class DynamicRoutingDataSource extends AbstractRoutingDataSource {


    @Override
    protected Object determineCurrentLookupKey() {
        log.info("重要当前的数据源{}",DynamicDataSourceContextHolder.get());
        return DynamicDataSourceContextHolder.get();
    }

}
